﻿/* Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
namespace Sys.Workflow.Engine.Runtime
{
    /// <summary>
    /// Represent a 'path of execution' in a process instance.
    /// 
    /// Note that a <seealso cref="IProcessInstance"/> also is an execution.
    /// 
    /// 
    /// </summary>
    public interface IExecution
    {

        /// <summary>
        /// The unique identifier of the execution.
        /// </summary>
        string Id { get; }

        /// <summary>
        /// Indicates if the execution is suspended.
        /// </summary>
        bool Suspended { get; }

        /// <summary>
        /// Indicates if the execution is ended.
        /// </summary>
        bool Ended { get; }

        /// <summary>
        /// Returns the id of the activity where the execution currently is at. Returns null if the execution is not a 'leaf' execution (eg concurrent parent).
        /// </summary>
        string ActivityId { get; }

        /// <summary>
        /// Id of the root of the execution tree representing the process instance. It is the same as <seealso cref="#getId()"/> if this execution is the process instance.
        /// </summary>
        string ProcessInstanceId { get; }

        /// <summary>
        /// Gets the id of the parent of this execution. If null, the execution represents a process-instance.
        /// </summary>
        string ParentId { get; }

        /// <summary>
        /// Gets the id of the super execution of this execution.
        /// </summary>
        string SuperExecutionId { get; }

        /// <summary>
        /// Id of the root of the execution tree representing the process instance that has no super execution.
        /// </summary>
        string RootProcessInstanceId { get; }

        /// <summary>
        /// The tenant identifier of this process instance
        /// </summary>
        string TenantId { get; }

        /// <summary>
        /// Returns the name of this execution.
        /// </summary>
        string Name { get; }

        /// <summary>
        /// Returns the description of this execution.
        /// </summary>
        string Description { get; }
    }
}